%     VIRTUAL LAMINATE - программа для получения эффективных свойств слоистых пластин
%     Copyright (C) 2020  Михаил Козлов
%     Сайт проекта: <http://www.fastenerdoctor.ru/>
%     Адрес электронной почты для связи с разработчиком:
%     <doctor.fastener@gmail.com>
% 
%     Эта программа является свободным программным обеспечением: Вы можете
%     распространять ее и/или изменять, соблюдая условия Универсальной общественной
%     лицензии GNU, опубликованной Фондом свободного программного обеспечения,
%     либо редакции 3, либо (на Ваше усмотрение) любой редакции, выпущенной позже.
% 
%     Эта программа распространяется в надежде на то, что она окажется полезной,
%     но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, включая даже подразумеваемую гарантию ТОВАРНОЙ ПРИГОДНОСТИ,
%     либо ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Ознакомьтесь с Универсальной общественной
%     лицензией GNU для получения более подробной информации.
% 
%     Вы должны были получить копию Универсальной общественной лицензии GNU
%     вместе с этой программой. Если Вы ее не получили, то перейдите по адресу:
%     <http://www.gnu.org/licenses/>.
% 
%     This program is free software: you can redistribute it and/or modify
%     it under the terms of the GNU General Public License as published by
%     the Free Software Foundation, either version 3 of the License, or
%     (at your option) any later version.
% 
%     This program is distributed in the hope that it will be useful,
%     but WITHOUT ANY WARRANTY; without even the implied warranty of
%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%     GNU General Public License for more details.
% 
%     You should have received a copy of the GNU General Public License
%     along with this program.  If not, see <https://www.gnu.org/licenses/>.

function Write_Result_File_Mech(Current_Folder, File_Name, Properties_Alpha, Properties_Beta, Mechanical_BC_TYPE)

global ErrCode;

Result_Representation = 'ROW'; % ROW | COLUMN

number_format = '%.12f';
number_format_2 = '%.12e';

File_path = [Current_Folder '\' File_Name];

Fout = fopen(File_path, 'wt');

if (Fout < 0)
    fprintf (1, '\nОшибка функции Write_Result_File_Mech: не удалось открыть для записи файл [%s] !\n', File_path);
    ErrCode = -1;
    return;
end

fprintf(Fout, 'VIRTUAL LAMINATE RESULTS FILE\n');

fprintf(Fout, '\n');

if (strcmp(Mechanical_BC_TYPE, 'HARD'))

    fprintf(Fout, 'WARNING! HARD BOUNDARY CONDITIONS\n');

    fprintf(Fout, '\n');

end

fprintf(Fout, 'Nu12*E2 = Nu21*E1\n');
fprintf(Fout, 'Nu13*E3 = Nu31*E1\n');
fprintf(Fout, 'Nu23*E3 = Nu32*E2\n');

fprintf(Fout, '\n');

switch Result_Representation
    
    case 'ROW'
        
        if (isempty(Properties_Beta))

            fprintf(Fout, 'E1\tE2\tE3\tG12\tG13\tG23\tNu12\tNu13\tNu23\talpha11\talpha22\talpha33\n');
            fprintf(Fout, [number_format '\t' number_format '\t' number_format '\t' number_format '\t' number_format '\t' number_format '\t' ...
                           number_format_2 '\t' number_format_2 '\t' number_format_2 '\t' number_format_2 '\t' number_format_2 '\t' number_format_2 '\n'], ...
                           Properties_Alpha.E1, Properties_Alpha.E2, Properties_Alpha.E3, Properties_Alpha.G12, Properties_Alpha.G13, Properties_Alpha.G23, ...
                           Properties_Alpha.Nu12, Properties_Alpha.Nu13, Properties_Alpha.Nu23, Properties_Alpha.alpha11, Properties_Alpha.alpha22, Properties_Alpha.alpha33);

        else

            fprintf(Fout, 'E1\tE2\tE3\tG12\tG13\tG23\tNu12\tNu13\tNu23\talpha11\talpha22\talpha33\tbeta11\tbeta22\tbeta33\n');
            fprintf(Fout, [number_format '\t' number_format '\t' number_format '\t' number_format '\t' number_format '\t' number_format '\t' ...
                           number_format_2 '\t' number_format_2 '\t' number_format_2 '\t' number_format_2 '\t' number_format_2 '\t' number_format_2 '\t' ...
                           number_format_2 '\t' number_format_2 '\t' number_format_2 '\n'], ...
                           Properties_Alpha.E1, Properties_Alpha.E2, Properties_Alpha.E3, Properties_Alpha.G12, Properties_Alpha.G13, Properties_Alpha.G23, ...
                           Properties_Alpha.Nu12, Properties_Alpha.Nu13, Properties_Alpha.Nu23, Properties_Alpha.alpha11, Properties_Alpha.alpha22, Properties_Alpha.alpha33, ...
                           Properties_Beta.alpha11, Properties_Beta.alpha22, Properties_Beta.alpha33);

        end

    case 'COLUMN'
        
        fprintf(Fout, ['E1\t' number_format '\n'], Properties_Alpha.E1);
        fprintf(Fout, ['E2\t' number_format '\n'], Properties_Alpha.E2);
        fprintf(Fout, ['E3\t' number_format '\n'], Properties_Alpha.E3);

        fprintf(Fout, ['G12\t' number_format '\n'], Properties_Alpha.G12);
        fprintf(Fout, ['G13\t' number_format '\n'], Properties_Alpha.G13);
        fprintf(Fout, ['G23\t' number_format '\n'], Properties_Alpha.G23);

        fprintf(Fout, ['Nu12\t' number_format_2 '\n'], Properties_Alpha.Nu12);
        fprintf(Fout, ['Nu13\t' number_format_2 '\n'], Properties_Alpha.Nu13);
        fprintf(Fout, ['Nu23\t' number_format_2 '\n'], Properties_Alpha.Nu23);

        fprintf(Fout, '\n');

        fprintf(Fout, ['alpha11\t' number_format_2 '\n'], Properties_Alpha.alpha11);
        fprintf(Fout, ['alpha22\t' number_format_2 '\n'], Properties_Alpha.alpha22);
        fprintf(Fout, ['alpha33\t' number_format_2 '\n'], Properties_Alpha.alpha33);

        if (~isempty(Properties_Beta))

            fprintf(Fout, '\n');

            fprintf(Fout, ['beta11\t' number_format_2 '\n'], Properties_Beta.alpha11);
            fprintf(Fout, ['beta22\t' number_format_2 '\n'], Properties_Beta.alpha22);
            fprintf(Fout, ['beta33\t' number_format_2 '\n'], Properties_Beta.alpha33);

        end
    
end

fclose(Fout);
